﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FrbaCommerce.Clases;

namespace FrbaCommerce.Comprar_Ofertar
{
    public partial class ComprarOfertar : Form
    {
        Paginador paginador;
        DataTable data;
        int paginaActual = 1;
        Usuario usuarioLogueado;
   
        /*FALTA EL BUTTON COLUMN SEGUN TIPO DE ACCION!!!!*/
        public ComprarOfertar(Usuario usuarioLogueado)
        {
            InitializeComponent();
            this.usuarioLogueado = usuarioLogueado;
            getRubros();
            cbx_rubros.DisplayMember = "descripcion";
        }

        private DataTable getPublicaciones() 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data = new DataSet();

            try 
            {
                data = conexion.ejecutarConsulta(getQueryPublicaciones());
                return data.Tables[0];
            }

            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }
            return new DataTable();
         
        } 

        private String getQueryPublicaciones () 
        {   
             String query = "SELECT p.cod as 'Código', p.descripcion as 'Descripción', u.username as 'Vendedor', p.stock as 'Stock Disponible',";
            query+= " p.fecha_venc as 'Fecha de vencimiento', p.monto as 'Monto', tp.descripcion as 'Tipo', 'Activa' as 'Estado'";
            query+= " FROM ASDF.Publicacion p, ASDF.Usuario u, ASDF.Publicacion_rubros pr, ASDF.Rubro r, ASDF.Tipo_publicacion tp";
            query+= " WHERE p.estado = 2 AND p.usuario=u.id AND pr.publicacion = p.cod AND tp.id = p.tipo AND p.usuario!="+ this.getIdUsuarioLogueado().ToString();
            query += " and pr.rubro = r.codigo AND p.stock>0 AND p.fecha_venc >= CURRENT_TIMESTAMP AND p.descripcion like  '%" + this.textBox1.Text + "%'";
            query += " and r.descripcion = '"+ this.cbx_rubros.Text +"' order by p.cod";

            //agregar and p.fecha_venc >= CURRENT_TIMESTAMP
            return query;
        }

        private void btn_primero_Click (object sender, EventArgs e) 
        {
            this.paginaActual = 1;
            this.lbl_pagX.Text= "Pag. " + this.paginaActual.ToString();
            this.dgvListado.DataSource = paginador.getPagina(paginaActual);
        }

        private void btn_ultima_Click (object sender, EventArgs e) 
        {
            this.paginaActual = paginador.getCantidadDePaginas();
            this.lbl_pagX.Text = "Pag. " + this.paginaActual.ToString();
            this.dgvListado.DataSource = paginador.getPagina(paginaActual);
        }

        private void btn_sgte_Click (object sender, EventArgs e) 
        {
            if (this.paginaActual == this.paginador.getCantidadDePaginas()) 
            {
                return;
            }
            this.paginaActual++;
            this.lbl_pagX.Text = "Pag. " + this.paginaActual.ToString();
            this.dgvListado.DataSource = paginador.getPagina(paginaActual);
        }

        private void btn_anterior_Click (object sender, EventArgs e)
        {
            if (this.paginaActual == 1)
            {
                return;
            }
            this.paginaActual--;
            this.lbl_pagX.Text = "Pag. " + this.paginaActual.ToString();
            this.dgvListado.DataSource = paginador.getPagina(paginaActual);
        }

        private void getRubros() 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data = new DataSet();

            String query = "SELECT descripcion FROM ASDF.Rubro";

            try 
            {
                data = conexion.ejecutarConsulta(query);
                this.cbx_rubros.DataSource = data.Tables[0];
            }

            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }   
        }

        public int getIdUsuarioLogueado() 
        {
            return this.usuarioLogueado.Id;
        }

        private void dgvListado_ComprarOfertar_Click(object sender, DataGridViewCellEventArgs e) 
        {
            if (!puedeComprarOfertar()) 
            {
                MessageBox.Show("Tiene más de 5 publicaciones por calificar. Por favor califique antes de comprar/ofertar.");
                return;
            }
            decimal codigo = Convert.ToDecimal(this.dgvListado.Rows[e.RowIndex].Cells["Código"].Value.ToString());
            if (String.Compare(this.dgvListado.Rows[e.RowIndex].Cells[6].Value.ToString(), "Compra Inmediata") == 0)
            {
                
                AltaCompra compra = new AltaCompra(codigo, this);
                if (!compra.getSinStock())
                {
                    compra.ShowDialog();
                }
            }

            //SUBASTA
            else 
            {
                AltaOferta oferta = new AltaOferta(codigo, this);
                oferta.ShowDialog();
            }
        
        }

        private void addAccion () 
        {
            DataGridViewLinkColumn actionColumn = new DataGridViewLinkColumn();

            actionColumn.Text = "Comprar/Ofertar";
            actionColumn.UseColumnTextForLinkValue = true;
            actionColumn.Name = "accion";

            this.dgvListado.Columns.Add(actionColumn);

            this.dgvListado.CellContentClick += new DataGridViewCellEventHandler(dgvListado_ComprarOfertar_Click);
            this.dgvListado.AutoResizeColumns();
        }

        
        private void btn_filtrar_Click (object sender, EventArgs e) 
        {
            this.data = getPublicaciones();

            if (this.data.Rows.Count == 0)
            {
                    MessageBox.Show("No hay datos para mostrar");
                    return;
            }

             this.paginador = new Paginador(this.data, 10);
             dgvListado.DataSource = paginador.getPagina(this.paginaActual);
             this.dgvListado.AllowUserToAddRows = false;
             if (!this.dgvListado.Columns.Contains("accion")) 
             {
                addAccion();
             }
             
             this.lbl_pagX.Text = "Pag. 1";
             this.lbl_pagfin.Text = paginador.getCantidadDePaginas().ToString();
             this.cbx_rubros.DisplayMember = "descripcion";             
        }

        private Boolean puedeComprarOfertar()
        {
            return (this.usuarioLogueado.getCantidadDePublicacionesSinCalificar() < 5);
        }
  
    }
}
